home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / inet / internet-drafts / draft-ietf-dhc-bootp-01.txt < prev    next >
Text File  |  1993-03-03  |  45KB  |  1,084 lines

  1.  
  2. Internet Engineering Task Force                                     W. Wimer
  3. Internet Draft                                    Carnegie Mellon University
  4.                                                              September, 1992
  5.  
  6.                                    DRAFT
  7.  
  8.           Clarifications and Extensions for the Bootstrap Protocol
  9.  
  10.  
  11. Status of this Memo
  12.  
  13.     This document is an Internet Draft.  Internet Drafts are working
  14.     documents of the Internet Engineering Task Force (IETF), its Areas, and
  15.     its Working Groups.  (Note that other groups may also distribute working
  16.     documents as Internet Drafts.)
  17.  
  18.     Internet Drafts are draft documents valid for a maximum of six months.
  19.     Internet Drafts may be updated, replaced, or obsoleted by other
  20.     documents at any time.  It is not appropriate to use Internet Drafts as
  21.     reference material or to cite them other than as a "working draft" or
  22.     "work in progress."
  23.  
  24.     Please check the I-D abstract listing contained in each Internet Draft
  25.     directory to learn the current status of this or any other Internet
  26.     Draft.  This Internet Draft expires on February 28, 1993.
  27.  
  28.     This memo suggests several updates to the specification of the Bootstrap
  29.     Protocol (BOOTP) based on experience with the protocol.
  30.  
  31.     This proposal is a product of the IETF Dynamic Host Configuration
  32.     Working Group.  This draft document will be submitted to the RFC editor
  33.     as a protocol specification.  Comments on this memo should be sent to
  34.     the IETF Dynamic Host Configuration Working Group mailing list,
  35.     host-conf@sol.bucknell.edu.
  36.  
  37.     Distribution of this memo is unlimited.
  38.  
  39.  
  40. Abstract
  41.  
  42.     Some aspects of the BOOTP protocol were rather loosely defined in its
  43.     original specification.  In particular, only a general description was
  44.     provided for the behavior of "BOOTP relay agents" (originally called
  45.     "BOOTP forwarding agents").  The client behavior description also
  46.     suffered in certain ways.  This memo attempts to clarify and strengthen
  47.     the specification in these areas.
  48.  
  49.     In addition, new issues have arisen since the original specification was
  50.     written.  This memo also attempts to address some of these.
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57. W. Wimer         This document EXPIRES on February 28, 1993         [Page 1]
  58.  
  59.  
  60. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  61.  
  62.  
  63.                              Table of Contents
  64.  
  65. 1. Introduction                                                            3
  66.    1.1 Requirements                                                        3
  67.    1.2 Terminology                                                         4
  68.    1.3 Data Transmission Order                                             5
  69.  
  70. 2. Definition of the 'flags' Field                                         6
  71.  
  72. 3. BOOTP Relay Agents                                                      7
  73.    3.1 General BOOTP Processing                                            8
  74.        3.1.1 BOOTREQUEST Messages                                          8
  75.        3.1.2 BOOTREPLY Messages                                           11
  76.  
  77. 4. BOOTP Client Behavior                                                  13
  78.    4.1 Client use of the 'flags' field                                    13
  79.        4.1.1 The BROADCAST flag                                           13
  80.        4.1.2 The remainder of the 'flags' field                           14
  81.    4.2 Definition of the 'secs' field                                     14
  82.    4.3 Interpretation of the 'giaddr' field                               14
  83.    4.4 Vendor information "magic cookie"                                  15
  84.  
  85. 5. Bit Ordering of Hardware Addresses                                     16
  86.  
  87. 6. BOOTP Over IEEE 802.5 Token Ring Networks                              16
  88.  
  89. Security Considerations                                                   18
  90.  
  91. Acknowledgements                                                          18
  92.  
  93. References                                                                19
  94.  
  95. Author's Address                                                          19
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. W. Wimer         This document EXPIRES on February 28, 1993         [Page 2]
  115.  
  116.  
  117. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  118.  
  119.  
  120. 1. Introduction
  121.  
  122.     The Bootstrap Protocol (BOOTP) is a UDP/IP-based protocol which allows a
  123.     booting host to configure itself dynamically and without user
  124.     supervision.  BOOTP provides a means to notify a host of its assigned IP
  125.     address, the IP address of a boot server host, and the name of a file to
  126.     be loaded into memory and executed [1].  Other configuration information
  127.     such as the local subnet mask, the local time offset, the addresses of
  128.     default routers, and the addresses of various Internet servers can also
  129.     be communicated to a host using BOOTP [2,3].
  130.  
  131.     Unfortunately, the original BOOTP specification [1] left some issues of
  132.     the protocol open to question.  The exact behavior of BOOTP relay agents
  133.     (formerly called "BOOTP forwarding agents") was not clearly specified.
  134.     Some parts of the overall protocol specification actually conflict,
  135.     while other parts have been subject to misinterpretation, indicating
  136.     that clarification is needed.  This memo addresses these problems.
  137.  
  138.     Since the introduction of BOOTP, the IEEE 802.5 Token Ring Network has
  139.     been developed which presents a unique problem for BOOTP's particular
  140.     message-transfer paradigm.  This memo also suggests a solution for this
  141.     problem.
  142.  
  143.  
  144.     1.1 Requirements
  145.  
  146.         In this memo, the words that are used to define the significance of
  147.         particular requirements are capitalized.  These words are:
  148.  
  149.         o   "MUST"
  150.  
  151.             This word or the adjective "REQUIRED" means that the item
  152.             is an absolute requirement of the specification.
  153.  
  154.         o   "MUST NOT"
  155.  
  156.             This phrase means that the item is an absolute prohibition
  157.             of the specification.
  158.  
  159.         o   "SHOULD"
  160.  
  161.             This word or the adjective "RECOMMENDED" means that there
  162.             may exist valid reasons in particular circumstances to
  163.             ignore this item, but the full implications should be
  164.             understood and the case carefully weighed before choosing a
  165.             different course.
  166.  
  167.  
  168.  
  169.  
  170.  
  171. W. Wimer         This document EXPIRES on February 28, 1993         [Page 3]
  172.  
  173.  
  174. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  175.  
  176.  
  177.         o   "SHOULD NOT"
  178.  
  179.             This phrase means that there may exist valid reasons in
  180.             particular circumstances when the listed behavior is
  181.             acceptable or even useful, but the full implications should
  182.             be understood and the case carefully weighed before
  183.             implementing any behavior described with this label.
  184.  
  185.         o   "MAY"
  186.  
  187.             This word or the adjective "OPTIONAL" means that this item
  188.             is truly optional.  One vendor may choose to include the
  189.             item because a particular marketplace requires it or
  190.             because it enhances the product, for example; another
  191.             vendor may omit the same item.
  192.  
  193.  
  194.     1.2 Terminology
  195.  
  196.         This memo uses the following terms:
  197.  
  198.             BOOTREQUEST
  199.                 A BOOTREQUEST message is a BOOTP message sent from a BOOTP
  200.                 client to a BOOTP server, requesting configuration
  201.                 information.
  202.  
  203.             BOOTREPLY
  204.                 A BOOTREPLY message is a BOOTP message sent from a BOOTP
  205.                 server to a BOOTP client, providing configuration
  206.                 information.
  207.  
  208.             Silently discard
  209.                 This memo specifies several cases where a BOOTP relay agent
  210.                 is to "silently discard" a received BOOTP message.  This
  211.                 means that the relay agent should discard the message
  212.                 without further processing, and that the relay agent will
  213.                 not send any ICMP error message as a result.  However, for
  214.                 diagnosis of problems, the relay agent SHOULD provide the
  215.                 capability of logging the error, including the contents of
  216.                 the silently-discarded message, and SHOULD record the event
  217.                 in a statistics counter.
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228. W. Wimer         This document EXPIRES on February 28, 1993         [Page 4]
  229.  
  230.  
  231. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  232.  
  233.  
  234.     1.3 Data Transmission Order
  235.  
  236.         The order of transmission of the header and data described in this
  237.         document is resolved to the octet level.  Whenever a diagram shows a
  238.         group of octets, the order of transmission of those octets is the
  239.         normal order in which they are read in English.  For example, in the
  240.         following diagram, the octets are transmitted in the order they are
  241.         numbered.
  242.  
  243.              0                   1
  244.              0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  245.             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  246.             |       1       |       2       |
  247.             +-------------------------------+
  248.             |       3       |       4       |
  249.             +-------------------------------+
  250.             |       5       |       6       |
  251.             +-------------------------------+
  252.  
  253.         Whenever an octet represents a numeric quantity, the leftmost bit in
  254.         the diagram is the high order or most significant bit.  That is, the
  255.         bit labeled 0 is the most significant bit.  For example, the
  256.         following diagram represents the value 170 (decimal).
  257.  
  258.              0 1 2 3 4 5 6 7
  259.             +-+-+-+-+-+-+-+-+
  260.             |1 0 1 0 1 0 1 0|
  261.             +---------------+
  262.  
  263.         Similarly, whenever a multi-octet field represents a numeric
  264.         quantity the leftmost bit of the whole field is the most significant
  265.         bit.  When a multi-octet quantity is transmitted the most
  266.         significant octet is transmitted first.
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285. W. Wimer         This document EXPIRES on February 28, 1993         [Page 5]
  286.  
  287.  
  288. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  289.  
  290.  
  291. 2. Definition of the 'flags' Field
  292.  
  293.     The standard BOOTP message format defined in [1] includes a two-octet
  294.     field located between the 'secs' field and the 'ciaddr' field.  This
  295.     field is merely designated as "unused" and its contents left
  296.     unspecified, although Section 7.1 of [1] does offer the following
  297.     suggestion:
  298.  
  299.         "Before setting up the packet for the first time, it is a good idea
  300.         to clear the entire packet buffer to all zeros; this will place all
  301.         fields in their default state."
  302.  
  303.     This memo hereby designates this two-octet field as the 'flags' field.
  304.  
  305.     The first 44 octets of a BOOTP message are shown below.  The numbers in
  306.     parentheses indicate the size of each field in octets.
  307.  
  308.          0                   1                   2                   3
  309.          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  310.         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  311.         |     op (1)    |   htype (1)   |   hlen (1)    |   hops (1)    |
  312.         +---------------+---------------+---------------+---------------+
  313.         |                            xid (4)                            |
  314.         +-------------------------------+-------------------------------+
  315.         |           secs (2)            |           flags (2)           |
  316.         +-------------------------------+-------------------------------+
  317.         |                           ciaddr (4)                          |
  318.         +---------------------------------------------------------------+
  319.         |                           yiaddr (4)                          |
  320.         +---------------------------------------------------------------+
  321.         |                           siaddr (4)                          |
  322.         +---------------------------------------------------------------+
  323.         |                           giaddr (4)                          |
  324.         +---------------------------------------------------------------+
  325.         |                                                               |
  326.         |                           chaddr (16)                         |
  327.         |                                                               |
  328.         |                                                               |
  329.         +---------------------------------------------------------------+
  330.  
  331.     This document hereby defines the most significant bit of the 'flags'
  332.     field as the BROADCAST (B) flag.  The semantics of this flag are
  333.     discussed in Sections 3.1.2 and 4.1.1 of this memo.
  334.  
  335.     The remaining bits of the 'flags' field are reserved for future use.
  336.     They MUST be set to zero by clients and ignored by servers and relay
  337.     agents.
  338.  
  339.  
  340.  
  341.  
  342. W. Wimer         This document EXPIRES on February 28, 1993         [Page 6]
  343.  
  344.  
  345. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  346.  
  347.  
  348.     The 'flags' field, then, appears as follows:
  349.  
  350.          0                   1
  351.          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  352.         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  353.         |B|             MBZ             |
  354.         +-+-----------------------------+
  355.  
  356.     where:
  357.  
  358.         B       BROADCAST flag (discussed in Sections 3.1.2 and 4.1.1)
  359.  
  360.         MBZ     MUST BE ZERO (reserved for future use)
  361.  
  362.  
  363.  
  364. 3. BOOTP Relay Agents
  365.  
  366.     In many cases, BOOTP clients and their associated BOOTP server(s) do not
  367.     reside on the same IP network or subnet.  In such cases, some kind of
  368.     third-party agent is required to transfer BOOTP messages between clients
  369.     and servers.  Such an agent was originally referred to as a "BOOTP
  370.     forwarding agent."  However, in order to avoid confusion with the IP
  371.     forwarding function of an IP router, the name "BOOTP relay agent" is
  372.     hereby adopted instead.
  373.  
  374.         DISCUSSION:
  375.             A BOOTP relay agent performs a task which is distinct from an IP
  376.             router's normal IP forwarding function.  While a router normally
  377.             switches IP datagrams between networks more-or-less
  378.             transparently, a BOOTP relay agent may more properly be thought
  379.             to receive BOOTP messages as a final destination and then
  380.             generate new BOOTP messages as a result.  One should resist the
  381.             notion of simply forwarding a BOOTP message "straight through
  382.             like a regular packet."
  383.  
  384.     This relay-agent functionality is most conveniently located in the
  385.     routers which interconnect the clients and servers, but may
  386.     alternatively be located in a host which is directly connected to the
  387.     client subnet.
  388.  
  389.     Any Internet host or router which provides BOOTP relay-agent capability
  390.     MUST conform to the specifications in this memo.
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399. W. Wimer         This document EXPIRES on February 28, 1993         [Page 7]
  400.  
  401.  
  402. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  403.  
  404.  
  405.     3.1 General BOOTP Processing
  406.  
  407.         All locally delivered UDP messages whose UDP destination port number
  408.         is BOOTPS (67) are considered for special processing by the host or
  409.         router's logical BOOTP relay agent.
  410.  
  411.         In the case of a host, locally delivered datagrams are simply all
  412.         datagrams normally received by that host, i.e. broadcast and
  413.         multicast datagrams as well as unicast datagrams addressed to IP
  414.         addresses of that host.
  415.  
  416.         In the case of a router, local delivery has a similar but somewhat
  417.         more careful definition for which [4] should be consulted.
  418.  
  419.         Hosts and routers are usually required to silently discard incoming
  420.         datagrams containing illegal IP source addresses.  This is generally
  421.         known as "Martian address filtering."  One of these illegal
  422.         addresses is 0.0.0.0 (or actually anything on network 0).  However,
  423.         hosts or routers which support a BOOTP relay agent MUST accept for
  424.         local delivery to the relay agent BOOTREQUEST messages whose IP
  425.         source address is 0.0.0.0.  BOOTREQUEST messages from legal IP
  426.         source addresses MUST also be accepted, of course.
  427.  
  428.         The following consistency checks SHOULD be performed on BOOTP
  429.         messages:
  430.  
  431.         o   The IP Total Length and UDP Length must be large enough to
  432.             contain the minimal BOOTP header of 300 octets (in the UDP
  433.             data field) specified in [1].
  434.  
  435.             NOTE:  Future extensions to the BOOTP protocol may increase
  436.             the size of BOOTP messages.  Therefore, BOOTP messages
  437.             which, according to the IP Total Length and UDP Length
  438.             fields, are larger than the minimum size specified by [1]
  439.             MUST also be accepted.
  440.  
  441.         o   The 'op' (opcode) field of the message must contain either
  442.             the code for a BOOTREQUEST (1) or the code for a BOOTREPLY
  443.             (2).
  444.  
  445.         BOOTP messages not meeting these consistency checks MUST be silently
  446.         discarded.
  447.  
  448.  
  449.         3.1.1 BOOTREQUEST Messages
  450.  
  451.             Some configuration mechanism MUST exist to enable or disable the
  452.             relaying of BOOTREQUEST messages.  Relaying MUST be disabled by
  453.  
  454.  
  455.  
  456. W. Wimer         This document EXPIRES on February 28, 1993         [Page 8]
  457.  
  458.  
  459. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  460.  
  461.  
  462.             default.
  463.  
  464.             When the BOOTP relay agent receives a BOOTREQUEST message, it
  465.             MAY use the value of the 'secs' (seconds since client began
  466.             booting) field of the request as a factor in deciding whether to
  467.             relay the request.  If such a policy mechanism is implemented,
  468.             its threshold SHOULD be configurable.
  469.  
  470.                 DISCUSSION:
  471.                     To date, this feature of the BOOTP protocol has not
  472.                     necessarily been shown to be useful.  See Section 4.2
  473.                     for a discussion.
  474.  
  475.             The relay agent MUST silently discard BOOTREQUEST messages whose
  476.             'hops' field exceeds the value 16.  A configuration option
  477.             SHOULD be provided to set this threshold to a smaller value if
  478.             desired by the network manager.  The default setting for a
  479.             configurable threshold SHOULD be 4.
  480.  
  481.             If the relay agent does decide to relay the request, it MUST
  482.             examine the 'giaddr' ("gateway" IP address) field.  If this
  483.             field is zero, the relay agent MUST fill this field with the IP
  484.             address of the logical interface on which the request was
  485.             received.  In addition, the relay agent MAY insert the subnet
  486.             mask of that logical interface into the vendor area (see the
  487.             next paragraph for details).  If the 'giaddr' field contains
  488.             some non-zero value, the 'giaddr' field MUST NOT be modified and
  489.             the subnet mask MUST NOT be inserted into the vendor area nor
  490.             modified.  The relay agent MUST NOT, under any circumstances,
  491.             fill the 'giaddr' field with a broadcast address as is suggested
  492.             in [1] (Section 8, sixth paragraph).
  493.  
  494.             To insert the subnet mask into the vendor area as suggested
  495.             above, the relay agent MUST examine the first four octets of the
  496.             'vend' field (these first four octets are usually referred to as
  497.             the "vendor magic number" or "vendor magic cookie").  If these
  498.             four octets do not contain the dotted decimal value 99.130.83.99
  499.             as specified in [2,3], the subnet mask MUST NOT be inserted.  If
  500.             these four octets do contain the value 99.130.83.99, it is safe
  501.             to insert the subnet mask.  The relay agent MUST use the data
  502.             format as specified in [2,3] and MUST use the "Subnet Mask
  503.             Field" (Tag 1) specified in [2,3] to express the subnet mask.
  504.             The relay agent MUST be careful to preserve any and all existing
  505.             data in the 'vend' field.  The subnet mask MUST either be placed
  506.             at the beginning of the data portion of the 'vend' field
  507.             (immediately after the four-octet magic cookie), or the relay
  508.             agent MUST be careful to replace any existing subnet mask
  509.             entries (Tag 1) with the correct subnet mask value.  This is to
  510.  
  511.  
  512.  
  513. W. Wimer         This document EXPIRES on February 28, 1993         [Page 9]
  514.  
  515.  
  516. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  517.  
  518.  
  519.             avoid any ambiguity in the event that the client supplied one or
  520.             more subnet mask entries somewhere in the 'vend' field.  If the
  521.             subnet mask cannot be inserted without loss of data in the
  522.             'vend' field, the subnet mask MUST NOT be inserted.
  523.  
  524.                 DISCUSSION:
  525.                     Having the relay agent insert the subnet mask into the
  526.                     vendor area is an optimization for the proposed Dynamic
  527.                     Host Configuration Protocol (DHCP) [5].  This
  528.                     optimization should not be strictly necessary for
  529.                     correct operation of the protocol, but it should make
  530.                     configuration of the DHCP server much easier.  It is
  531.                     strongly encouraged that relay agents provide this
  532.                     subnet mask feature, but it is not absolutely required.
  533.  
  534.             The value of the 'hops' field MUST be incremented.
  535.  
  536.             All other fields MUST be preserved intact.
  537.  
  538.             At this point, the request is relayed to its new destination (or
  539.             destinations).  This destination MUST be configurable.  Further,
  540.             this destination configuration SHOULD be independent of the
  541.             destination configuration for any other so-called "broadcast
  542.             forwarders" (e.g. for the UDP-based TFTP, DNS, Time, etc.
  543.             protocols).
  544.  
  545.                 DISCUSSION:
  546.                     The network manager may wish the relaying destination to
  547.                     be an IP unicast, multicast, broadcast, or some
  548.                     combination.  A configurable list of destination IP
  549.                     addresses provides good flexibility.  More flexible
  550.                     configuration schemes are encouraged.  For example, it
  551.                     may be desirable to send to the limited broadcast
  552.                     address (255.255.255.255) on specific logical
  553.                     interfaces.  However, if the BOOTREQUEST message was
  554.                     received as a broadcast, the relay agent MUST NOT
  555.                     rebroadcast the BOOTREQUEST on the logical interface
  556.                     from whence it came.
  557.  
  558.             A relay agent MUST use the same destination (or set of
  559.             destinations) for all BOOTREQUEST messages it relays from a
  560.             given client.
  561.  
  562.                 DISCUSSION:
  563.                     At least one known relay agent implementation uses a
  564.                     round-robin scheme to provide load balancing across
  565.                     multiple BOOTP servers.  Each time it receives a new
  566.                     BOOTREQUEST message, it relays the message to the next
  567.  
  568.  
  569.  
  570. W. Wimer         This document EXPIRES on February 28, 1993        [Page 10]
  571.  
  572.  
  573. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  574.  
  575.  
  576.                     BOOTP server in a list of servers.  Thus, with this
  577.                     relay agent, multiple consecutive BOOTREQUEST messages
  578.                     from a given client will be delivered to different
  579.                     servers.
  580.  
  581.                     Unfortunately, this well-intentioned scheme reacts badly
  582.                     with certain variations of the BOOTP protocol which
  583.                     depend on multiple exchanges of BOOTREQUEST and
  584.                     BOOTREPLY messages between clients and servers.
  585.                     Therefore, all BOOTREQUEST messages from a given client
  586.                     MUST be relayed to the same destination (or set of
  587.                     destinations).
  588.  
  589.                     One way to meet this requirement while providing some
  590.                     load-balancing benefit is to hash the client's
  591.                     link-layer address (or some other reliable
  592.                     client-identifying information) and use the resulting
  593.                     hash value to select the appropriate relay destination
  594.                     (or set of destinations).  The simplest solution, of
  595.                     course, is to not use a load-balancing scheme and just
  596.                     relay ALL received BOOTREQUEST messages to the same
  597.                     destination (or set of destinations).
  598.  
  599.             When transmitting the request to its next destination, the relay
  600.             agent may set the IP Time-To-Live field to either the default
  601.             value for new datagrams originated by the relay agent, or to the
  602.             TTL of the original BOOTREQUEST decremented by (at least) one.
  603.  
  604.                 DISCUSSION:
  605.                     As an extra precaution against BOOTREQUEST loops, it is
  606.                     preferable to use the decremented TTL from the original
  607.                     BOOTREQUEST.  Unfortunately, this may be difficult to do
  608.                     in some implementations.
  609.  
  610.             The UDP checksum must be recalculated before transmitting the
  611.             request.
  612.  
  613.  
  614.         3.1.2 BOOTREPLY Messages
  615.  
  616.             BOOTP relay agents relay BOOTREPLY messages only to BOOTP
  617.             clients.  It is the responsibility of BOOTP servers to send
  618.             BOOTREPLY messages directly to the relay agent identified in the
  619.             'giaddr' field.  Therefore, a relay agent may assume that all
  620.             BOOTREPLY messages it receives are intended for BOOTP clients on
  621.             its directly-connected networks.
  622.  
  623.             When a relay agent receives a BOOTREPLY message, it should
  624.  
  625.  
  626.  
  627. W. Wimer         This document EXPIRES on February 28, 1993        [Page 11]
  628.  
  629.  
  630. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  631.  
  632.  
  633.             examine the BOOTP 'giaddr', 'yiaddr', 'chaddr', 'htype', and
  634.             'hlen' fields.  These fields should provide adequate information
  635.             for the relay agent to deliver the BOOTREPLY message to the
  636.             client.
  637.  
  638.             The 'giaddr' field can be used to identify the logical interface
  639.             to which the reply must be sent (i.e. the host or router
  640.             interface connected to the same network as the BOOTP client).
  641.             If the content of the 'giaddr' field does not match one of the
  642.             relay agent's directly-connected logical interfaces, the
  643.             BOOTREPLY messsage MUST be silently discarded.
  644.  
  645.             The 'htype', 'hlen', and 'chaddr' fields supply the link-layer
  646.             hardware type, hardware address length, and hardware address of
  647.             the client as defined in the ARP protocol [6] and the Assigned
  648.             Numbers document [7].  The 'yiaddr' field is the IP address of
  649.             the client, as assigned by the BOOTP server.
  650.  
  651.             The relay agent SHOULD examine the newly-defined BROADCAST flag
  652.             (see Sections 2 and 4.1.1 for more information).  If this flag
  653.             is set to 1, the reply SHOULD be sent as an IP broadcast using
  654.             an IP broadcast address (preferably 255.255.255.255) as the IP
  655.             destination address and the link-layer broadcast address as the
  656.             link-layer destination address.  If the BROADCAST flag is
  657.             cleared (0), the reply SHOULD be sent as an IP unicast to the IP
  658.             address specified by the 'yiaddr' field and the link-layer
  659.             address specified in the 'chaddr' field.  If unicasting is not
  660.             possible, the reply MAY be sent to the link-layer broadcast
  661.             address using an IP broadcast address (preferably
  662.             255.255.255.255) as the IP destination address.
  663.  
  664.                 DISCUSSION:
  665.                     The addition of the BROADCAST flag to the protocol is a
  666.                     workaround to help promote interoperability with certain
  667.                     client implementations.
  668.  
  669.                     Note that since the 'flags' field was previously defined
  670.                     in [1] simply as an "unused" field, it is possible that
  671.                     old client or server implementations may accidentally
  672.                     and unknowingly set the new BROADCAST flag.  It is
  673.                     actually expected that such implementations will be rare
  674.                     (most implementations seem to zero-out this field), but
  675.                     interactions with such implementations must nevertheless
  676.                     be considered.  If an old client or server does set the
  677.                     BROADCAST flag to 1 incorrectly, conforming relay agents
  678.                     will generate broadcast BOOTREPLY messages to the
  679.                     corresponding client.  The BOOTREPLY messages should
  680.                     still properly reach the client, at the cost of one
  681.  
  682.  
  683.  
  684. W. Wimer         This document EXPIRES on February 28, 1993        [Page 12]
  685.  
  686.  
  687. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  688.  
  689.  
  690.                     (otherwise unnecessary) additional broadcast.  This,
  691.                     however, is no worse than a server or relay agent which
  692.                     always broadcasts its BOOTREPLY messages.
  693.  
  694.             The reply MUST have its UDP destination port set to BOOTPC (68).
  695.  
  696.             The UDP checksum must be recalculated before transmitting the
  697.             reply.
  698.  
  699.  
  700.  
  701. 4. BOOTP Client Behavior
  702.  
  703.     This section clarifies various issues regarding BOOTP client behavior.
  704.  
  705.  
  706.     4.1 Client use of the 'flags' field
  707.  
  708.  
  709.         4.1.1 The BROADCAST flag
  710.  
  711.             Normally, BOOTP servers and relay agents attempt to deliver
  712.             BOOTREPLY messages directly to a client using unicast delivery.
  713.             The IP destination address (in the IP header) is set to the
  714.             BOOTP 'yiaddr' address and the link-layer destination address is
  715.             set to the BOOTP 'chaddr' address.  Unfortunately, some client
  716.             implementations are unable to receive such unicast IP datagrams
  717.             until they know their own IP address (thus we have a "chicken
  718.             and egg" issue).  Often, however, they can receive broadcast IP
  719.             datagrams (those with a valid IP broadcast address as the IP
  720.             destination and the link-layer broadcast address as the
  721.             link-layer destination).
  722.  
  723.             If a client falls into this category, it SHOULD set (to 1) the
  724.             newly-defined BROADCAST flag in the 'flags' field of BOOTREPLY
  725.             messages it generates.  This will provide a hint to BOOTP
  726.             servers and relay agents that they should attempt to broadcast
  727.             their BOOTREPLY messages to the client.
  728.  
  729.             If a client does not have this limitation (i.e. it is perfectly
  730.             able to receive unicast BOOTREPLY messages), it SHOULD NOT set
  731.             the BROADCAST flag (i.e. it SHOULD clear the BROADCAST flag to
  732.             0).
  733.  
  734.                 DISCUSSION:
  735.                     This addition to the protocol is a workaround for old
  736.                     host implementations.  It is strongly recommended that
  737.                     such implementations be modified so that they may
  738.  
  739.  
  740.  
  741. W. Wimer         This document EXPIRES on February 28, 1993        [Page 13]
  742.  
  743.  
  744. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  745.  
  746.  
  747.                     receive unicast BOOTREPLY messages, thus making use of
  748.                     this workaround unnecessary.  In general, the use of
  749.                     this mechanism is discouraged.
  750.  
  751.  
  752.         4.1.2 The remainder of the 'flags' field
  753.  
  754.             The remaining bits of the 'flags' field are reserved for future
  755.             use.  A client MUST set these bits to zero in all BOOTREQUEST
  756.             messages it generates.  A client MUST ignore these bits in all
  757.             BOOTREPLY messages it receives.
  758.  
  759.  
  760.     4.2 Definition of the 'secs' field
  761.  
  762.         The 'secs' field of a BOOTREQUEST message SHOULD represent the
  763.         elapsed time, in seconds, since the client sent its first
  764.         BOOTREQUEST message.  Note that this implies that the 'secs' field
  765.         of the first BOOTREQUEST message SHOULD be set to zero.
  766.  
  767.         Clients SHOULD NOT set the 'secs' field to a value which is constant
  768.         for all BOOTREQUEST messages.
  769.  
  770.             DISCUSSION:
  771.                 The original definition of the 'secs' field was vague.  It
  772.                 was not clear whether it represented the time since the
  773.                 first BOOTREQUEST message was sent or some other time period
  774.                 such as the time since the client machine was powered-up.
  775.                 This has limited its usefulness as a policy control for
  776.                 BOOTP servers and relay agents.  Furthermore, certain client
  777.                 implementations have been known to simply set this field to
  778.                 a constant value or use incorrect byte-ordering (usually
  779.                 resulting in very inflated figures).
  780.  
  781.  
  782.     4.3 Interpretation of the 'giaddr' field
  783.  
  784.         The 'giaddr' field is rather poorly named.  It exists to facilitate
  785.         the transfer of BOOTREQUEST messages from a client, through BOOTP
  786.         relay agents, to servers on different networks than the client.
  787.         Similarly, it facilitates the delivery of BOOTREPLY messages from
  788.         the servers, through BOOTP relay agents, back to the client.  In no
  789.         case does it represent a general IP router to be used by the client.
  790.  
  791.         A BOOTP client MUST set the 'giaddr' field to zero (0.0.0.0) in all
  792.         BOOTREQUEST messages it generates.
  793.  
  794.         A BOOTP client MUST NOT consider the 'giaddr' field of a BOOTREPLY
  795.  
  796.  
  797.  
  798. W. Wimer         This document EXPIRES on February 28, 1993        [Page 14]
  799.  
  800.  
  801. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  802.  
  803.  
  804.         message to represent an IP router.  A BOOTP client SHOULD completely
  805.         ignore the contents of the 'giaddr' field in BOOTREPLY messages.
  806.  
  807.             DISCUSSION:
  808.                 The semantics of the 'giaddr' field were poorly defined.
  809.                 Section 7.5 of [1] states:
  810.  
  811.                     "If 'giaddr' (gateway address) is nonzero, then the
  812.                     packets should be forwarded there first, in order to
  813.                     get to the server."
  814.  
  815.                 In that sentence, "get to" refers to communication from the
  816.                 client to the server subsequent to the BOOTP exchange, such
  817.                 as a TFTP session.  Unfortunately, the 'giaddr' field may
  818.                 contain the address of a BOOTP relay agent that is not
  819.                 itself an IP router (according to [1], Section 8, fifth
  820.                 paragraph), in which case, it will be useless as a first-hop
  821.                 for TFTP packets sent to the server (since, by definition,
  822.                 non-routers don't forward datagrams at the IP layer).
  823.  
  824.                 Although now prohibited by Section 3.1.1 of this memo, the
  825.                 'giaddr' field might contain a broadcast address according
  826.                 to Section 8, sixth paragraph of [1].  Not only would such
  827.                 an address be useless as a router address, it might also
  828.                 cause the client to ARP for the broadcast address (since, if
  829.                 the client didn't receive a subnet mask in the BOOTREPLY
  830.                 message, it would be unable to recognize a subnet broadcast
  831.                 address).  This is clearly undesirable.
  832.  
  833.                 To reach a non-local server, clients can obtain a first-hop
  834.                 router address from the "Gateway" subfield of the "Vendor
  835.                 Information Extensions" [2,3] (if present), or from some
  836.                 other router discovery protocol.
  837.  
  838.  
  839.     4.4 Vendor information "magic cookie"
  840.  
  841.         It is RECOMMENDED that a BOOTP client always fill the first four
  842.         octets of the 'vend' (vendor information) field of a BOOTREQUEST
  843.         with a four-octet identifier called a "magic cookie."  A BOOTP
  844.         client SHOULD do this even if it has no special information to
  845.         communicate to the BOOTP server using the 'vend' field.  This aids
  846.         the BOOTP server in determining what vendor information format it
  847.         should use in its BOOTREPLY messages.
  848.  
  849.         If a special vendor-specific magic cookie is not being used, a BOOTP
  850.         client SHOULD use the dotted decimal value 99.130.83.99 as specified
  851.         in [2,3].  In this case, if the client has no information to
  852.  
  853.  
  854.  
  855. W. Wimer         This document EXPIRES on February 28, 1993        [Page 15]
  856.  
  857.  
  858. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  859.  
  860.  
  861.         communicate to the server, the octet immediately following the magic
  862.         cookie SHOULD be set to the "End" tag (255) and the remaining octets
  863.         of the 'vend' field SHOULD be set to zero.
  864.  
  865.             DISCUSSION:
  866.                 Sometimes different operating systems or networking packages
  867.                 are run on the same machine at different times (or even at
  868.                 the same time!).  Since the hardware address placed in the
  869.                 'chaddr' field will likely be the same, BOOTREQUESTs from
  870.                 completely different BOOTP clients on the same machine will
  871.                 likely be difficult for a BOOTP server to differentiate.  If
  872.                 the client includes a magic cookie in its BOOTREQUEST
  873.                 messages, the server will at least know what format the
  874.                 client expects and can understand in corresponding BOOTREPLY
  875.                 messages.
  876.  
  877.  
  878.  
  879. 5. Bit Ordering of Hardware Addresses
  880.  
  881.     The bit ordering used for link-level hardware addresses in the 'chaddr'
  882.     field SHOULD be the same as the ordering used for the ARP protocol [6]
  883.     on the client's network (assuming ARP is defined for that network).
  884.  
  885.         DISCUSSION:
  886.             One of the primary reasons the 'chaddr' field exists is to
  887.             enable BOOTP servers and relay agents to communicate directly
  888.             with clients without the use of broadcasts.  In practice, the
  889.             contents of the 'chaddr' field is often used to create an
  890.             ARP-cache entry in exactly the same way the normal ARP protocol
  891.             would have.  Clearly, interoperability can only be achieved if a
  892.             consistent interpretation of the 'chaddr' field is used.
  893.  
  894.  
  895.  
  896. 6. BOOTP Over IEEE 802.5 Token Ring Networks
  897.  
  898.     Special consideration of the client/server and client/relay agent
  899.     interactions must be given to 802.5 networks because of non-transparent
  900.     bridging.  In the simplest case, an unbridged, single ring network, the
  901.     broadcast behavior of the BOOTP protocol is identical to that of
  902.     Ethernet networks.  However, a BOOTP client cannot know, a priori, that
  903.     an 802.5 network is not bridged.  In fact, the likelihood is that the
  904.     server, or relay agent, will not know either.
  905.  
  906.     Of the four possible scenerios, only two are interesting: where the
  907.     assumption is that the 802.5 network is not bridged and it is, and the
  908.     assumption that the network is bridged and it is not.  In the former
  909.  
  910.  
  911.  
  912. W. Wimer         This document EXPIRES on February 28, 1993        [Page 16]
  913.  
  914.  
  915. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  916.  
  917.  
  918.     case, the Routing Information Field (RIF) will not be used; therefore,
  919.     if the server/relay agent are on another segment of the ring, the client
  920.     cannot reach it.  In the latter case, the RIF field will be used,
  921.     resulting in a few extraneous bytes on the ring.  It is obvious that an
  922.     almost immeasurable inefficiency is to be preferred over a complete
  923.     failure to communicate.
  924.  
  925.     Given that the assumption is that RIF fields will be needed, it is
  926.     necesary to determine the optimum method for the client to reach the
  927.     server/relay agent, and the optimum method for the response to be
  928.     returned.
  929.  
  930.     The client SHOULD send its broadcast BOOTREQUEST with an All Routes
  931.     Explorer RIF.  This will enable servers/relay agents to cache the return
  932.     route if they choose to do so.  For those server/relay agents which
  933.     cannot cache the return route (because they are stateless, for example),
  934.     the BOOTREPLY message is sent to the client's hardware address, as taken
  935.     from the BOOTP message, with a Spanning Tree Rooted RIF.  The actual
  936.     bridge route will be recorded by the client and server/relay agent by
  937.     normal ARP processing code.
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969. W. Wimer         This document EXPIRES on February 28, 1993        [Page 17]
  970.  
  971.  
  972. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  973.  
  974.  
  975. Security Considerations
  976.  
  977.     BOOTP is built directly upon UDP and IP which are as yet inherently
  978.     insecure.  Furthermore, BOOTP is generally intended to make maintenance
  979.     of remote and/or diskless hosts easier.  While perhaps not impossible,
  980.     configuring such hosts with passwords or keys may be difficult and
  981.     inconvenient.  Therefore, BOOTP in its current form is quite insecure.
  982.  
  983.     Unauthorized BOOTP servers may easily be set up.  Such servers can then
  984.     send false and potentially disruptive information to clients such as
  985.     incorrect or duplicate IP addresses, incorrect routing information
  986.     (including spoof routers, etc.), incorrect domain nameserver addresses
  987.     (such as spoof nameservers), and so on.  Clearly, once this "seed"
  988.     mis-information is planted, an attacker can further compromise the
  989.     affected systems.
  990.  
  991.     BOOTP relay agents suffer some of the same problems as BOOTP servers.
  992.  
  993.     Malicious BOOTP clients could masquerade as legitimate clients and
  994.     retrieve information intended for those legitimate clients.  Where
  995.     dynamic allocation of resources is used, a malicious client could claim
  996.     all resources for itself, thereby denying resources to legitimate
  997.     clients.
  998.  
  999.  
  1000.  
  1001. Acknowledgements
  1002.  
  1003.     The author would like to thank Gary Malkin of FTP Software, Inc. for his
  1004.     contribution of the "BOOTP over IEEE 802.5 Token Ring Networks" section,
  1005.     and Steve Deering of Xerox PARC for his observations on the problems
  1006.     associated with the 'giaddr' field.
  1007.  
  1008.     Ralph Droms of Bucknell University and the many members of the IETF
  1009.     Dynamic Host Configuration and Router Requirements working groups
  1010.     provided ideas for this memo as well as encouragement to write it.
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026. W. Wimer         This document EXPIRES on February 28, 1993        [Page 18]
  1027.  
  1028.  
  1029. INTERNET DRAFT      BOOTP CLARIFICATIONS AND EXTENSIONS      September, 1992
  1030.  
  1031.  
  1032. References
  1033.  
  1034.     [1]   Croft, B., and J. Gilmore.  Bootstrap Protocol (BOOTP).  Request
  1035.           For Comments (RFC) 951, DDN Network Information Center, SRI
  1036.           International, Menlo Park, California, USA, September, 1985.
  1037.  
  1038.     [2]   Prindeville, P.  BOOTP Vendor Information Extensions.  Request For
  1039.           Comments (RFC) 1048, DDN Network Information Center, SRI
  1040.           International, Menlo Park, California, USA, February, 1988.
  1041.  
  1042.     [3]   Reynolds, J.  BOOTP Vendor Information Extensions.  Request For
  1043.           Comments (RFC) 1084, DDN Network Information Center, SRI
  1044.           International, Menlo Park, California, USA, December, 1988.
  1045.  
  1046.     [4]   Almquist, P.  Requirements for IP Routers.  Internet Draft,
  1047.           Corporation for National Research Initiatives, Reston, Virginia,
  1048.           USA, May, 1991.
  1049.  
  1050.     [5]   Droms, R.  Dynamic Host Configuration Protocol.  Internet Draft,
  1051.           Corporation for National Research Initiatives, Reston, Virginia,
  1052.           USA, June, 1992.
  1053.  
  1054.     [6]   Plummer, D.  An Ethernet Address Resolution Protocol.  Request For
  1055.           Comments (RFC) 826, DDN Network Information Center, SRI
  1056.           International, Menlo Park, California, USA, November, 1982.
  1057.  
  1058.     [7]   Reynolds, J., and J. Postel.  Assigned Numbers.  Request For
  1059.           Comments (RFC) 1340, DDN Network Information Center, SRI
  1060.           International, Menlo Park, California, USA, July, 1992.  This RFC
  1061.           is periodically reissued with a new number.  Please be sure to
  1062.           consult the latest version.
  1063.  
  1064.  
  1065.  
  1066. Author's Address
  1067.  
  1068.     Walt Wimer
  1069.     Network Development
  1070.     Carnegie Mellon University
  1071.     4910 Forbes Avenue
  1072.     Pittsburgh, PA  15213-3890
  1073.  
  1074.     Phone:  (412) 268-6252
  1075.  
  1076.     EMail:  Walter.Wimer@ANDREW.CMU.EDU
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083. W. Wimer         This document EXPIRES on February 28, 1993        [Page 19]
  1084.